package org.gd.hellojavacore.patterns;

/**
 Порождающие шаблоны (англ. Creational patterns) — шаблоны проектирования, которые абстрагируют
 процесс инстанцирования. Они позволяют сделать систему независимой от способа создания,
 композиции и представления объектов. Шаблон, порождающий классы, использует наследование,
 чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует
 инстанцирование другому объекту.

 ----------------------------------------------------------------------------------------------

 Использование

 Эти шаблоны оказываются важны, когда система больше зависит от композиции объектов,
 чем от наследования классов. Получается так, что основной упор делается не на жестком
 кодировании фиксированного набора поведений, а на определении небольшого набора
 фундаментальных поведений, с помощью композиции которых можно получать любое число
 более сложных. Таким образом, для создания объектов с конкретным поведением требуется
 нечто большее, чем простое инстанцирование класса.

 Порождающие шаблоны инкапсулируют знания о конкретных классах, которые применяются в системе.
 Они скрывают детали того, как эти классы создаются и стыкуются. Единственная информация
 об объектах, известная системе, — это их интерфейсы, определенные с помощью абстрактных классов.
 Следовательно, порождающие шаблоны обеспечивают большую гибкость при решении вопроса о том,
 что создается, кто это создает, как и когда. Можно собрать систему из «готовых» объектов
 с самой различной структурой и функциональностью статически (на этапе компиляции)
 или динамически (во время выполнения).

 Иногда допустимо выбирать между тем или иным порождающим шаблоном. Например, есть случаи,
 когда с пользой для дела можно использовать как прототип, так и абстрактную фабрику.
 В других ситуациях порождающие шаблоны дополняют друг друга. Так, применяя строитель,
 можно использовать другие шаблоны для решения вопроса о том, какие компоненты нужно строить,
 а прототип часто реализуется вместе с одиночкой. Порождающие шаблоны тесно связаны друг с другом,
 их рассмотрение лучше проводить совместно, чтобы лучше были видны их сходства и различия.

 ----------------------------------------------------------------------------------------------

 Перечень порождающих шаблонов

 - абстрактная фабрика (abstract factory);
 - строитель (builder);
 - фабричный метод (factory method);
 - ленивая инициализация (lazy initialization);
 - объектный пул (object pool);
 - прототип (prototype);
 - одиночка (singleton).

 ----------------------------------------------------------------------------------------------

 Литература

 1. Алан Шаллоуей, Джеймс Р. Тротт Шаблоны проектирования.
 Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained:
 A New Perspective on Object-Oriented Design. — М.: «Вильямс», 2002. — С. 288. — ISBN 0-201-71594-5

 2. Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес
 Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns.
 Elements of Reusable Object-Oriented Software. — «Питер», Addison-Wesley, 2009. — С. 366. — ISBN 978-5-469-01136-1

 */
public interface CreationalPattern extends Pattern {
}